package src.A_JavaBase;

public class Demo05 {

    public static void main(String[] args) {
        Demo05 demo05 = new Demo05();
        System.out.println(demo05.sum(1,2));
        demo05.swith("X");
        demo05.getSeason(Season.AUTUMN);
    }

    //a,b叫做形参，上面调用的1,2叫做实参
    public Object sum(Object a,Object b){
        Object sum;
        //instanceof运算符的左边是实例对象，右边是构造函数。它会检查右边构造函数的原型对象（prototype），是否在左边对象的原型链上
        //如果两边不是父子关系，则会报红不能比较，因为它是向上一一回溯进行对比的，可看Oop01类继承一起理解
        if (a instanceof Integer && b instanceof Integer){
            return sum = (int)a + (int)b;
        }
        return "不是两个整数";
    }

    //switch变量类型可以是byte,short,int,char,JavaSE7后支持String类型和枚举(字符串本质还是数字通过hashCode中对应的hash值比较判断)
    public void swith(String grade){
        switch (grade){
            case "A" :
                System.out.println("优秀");
                break;
            case "B" :
                System.out.println("及格");
                break;
            default:
                System.out.println("就这？");
        }
    }

    /*
    1、枚举是一组常量的集合
    2、枚举属于一种特殊的类，里面只包含一组有限的特定的对象
    3、不需要提供 setXxxx() 方法，因为枚举对象值通常为只读
    4、对枚举对象/属性使用 static+final 共同修饰
    5、枚举对象名通常使用全部大写，与常量的命名规范一样
    6、枚举对象根据需要，也可以有多个属性
    7、枚举对象必须放在枚举类的行首
    8、使用enum关键字创建的枚举类，就不能再继承其它类了，因为使用enum创建的枚举类会隐式的继承Enum类，而Java是单继承机制
    9、枚举可以实现一个或多个接口（Interface）
    10、枚举可以单独定义在一个文件中，也可以嵌在其它Java类中
    * */
    public enum Season{
        SPRING(1,'春',"春困"),
        SUMMER(2,'夏',"夏倦"),
        AUTUMN(3,'秋',"秋乏"),
        WINTER(4,'冬',"冬眠");

        private int id;
        private char season;
        private String desc;

        private Season(int id, char season,String desc){
            this.id = id;
            this.season = season;
            this.desc = desc;
        }

        public int getId(){
            return id;
        }
        public char getSeason(){
            return season;
        }
        public String getDesc(){
            return desc;
        }
        public String toString(){
            return id+","+season+","+desc;
        }
    }
    public void getSeason(Season season){
        switch (season){
            case SPRING:
                System.out.println(season.toString());
                break;
            case SUMMER:
                System.out.println(season.toString());
                break;
            case AUTUMN:
                System.out.println(season.toString());
                break;
            case WINTER:
                System.out.println(season.toString());
                break;
            default:
                System.out.println("没有这个季节！");
        }
    }

}
